package cn.iocoder.yudao.module.xiaoBizHandler.service.codegen.newInner.yudao.template.java.dal;

import cn.iocoder.yudao.framework.common.genCode.common.StringBuilderHandler;
import cn.iocoder.yudao.module.xiaoBizHandler.dal.dataobject.codegen.XiaoBizHandlerCodegenColumnDO;
import cn.iocoder.yudao.module.xiaoBizHandler.dal.dataobject.codegen.XiaoBizHandlerCodegenTableDO;
import cn.iocoder.yudao.module.xiaoBizHandler.service.codegen.newInner.yudao.handler.PathHandler;
import cn.iocoder.yudao.module.xiaoBizHandler.service.codegen.newInner.yudao.template.CodeGenTemplate;
import cn.iocoder.yudao.module.xiaoBizHandler.service.codegen.newInner.GlobalBinding;
import cn.iocoder.yudao.module.xiaoBizHandler.service.codegen.newInner.LocalBinding;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class Mapper_Xml implements CodeGenTemplate {

    public String getPath(XiaoBizHandlerCodegenTableDO table, List<XiaoBizHandlerCodegenColumnDO> columns, GlobalBinding globalBinding, LocalBinding localBinding, XiaoBizHandlerCodegenColumnDO primaryColumn) {
        PathHandler pathHandler = PathHandler.builder()
                .table(table)
                .columns(columns)
                .globalBinding(globalBinding)
                .localBinding(localBinding)
                .primaryColumn(primaryColumn)
                .build();
        return pathHandler.mapperXmlFilePath();
    }


    public String render(XiaoBizHandlerCodegenTableDO table, List<XiaoBizHandlerCodegenColumnDO> columns, GlobalBinding globalBinding, LocalBinding localBinding, XiaoBizHandlerCodegenColumnDO primaryColumn) {
        StringBuilderHandler c = new StringBuilderHandler();
        c.ap("")
                .apAndBl("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
                .apAndBl("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">")
                .apAndBl("<mapper namespace=\"" + globalBinding.getBasePackage() + ".module." + table.getModuleName() + ".dal.mysql." + table.getBusinessName() + "." + table.getClassName() + "Mapper\">")
                .bl()
                .apAndBl("    <!--")
                .apAndBl("        一般情况下，尽可能使用 Mapper 进行 CRUD 增删改查即可。")
                .apAndBl("        无法满足的场景，例如说多表关联查询，才使用 XML 编写 SQL。")
                .apAndBl("        代码生成器暂时只生成 Mapper XML 文件本身，更多推荐 MybatisX 快速开发插件来生成查询。")
                .apAndBl("        文档可见：https://www.iocoder.cn/MyBatis/x-plugins/")
                .apAndBl("     -->")
                .bl()
                .apAndBl("</mapper>")
        .bl();
        return c.toString();
    }

}
